# coding=utf-8
# 全世界最帅的帅哥

def camel_to_snake(camel_str):
    """
    将驼峰命名的字符串转换为下划线命名的字符串。
    :param camel_str: 驼峰命名的字符串
    :return: 下划线命名的字符串
    """

    if not camel_str:
        return camel_str
    # 用于存储转换后的字符串
    snake_str = []

    for i, char in enumerate(camel_str):
        # 如果是大写字母且不是第一个字符，或者前一个字符也是大写字母（处理连续大写的情况，如HTTPResponse）
        if char.isupper():
            # 如果之前需要添加下划线且当前字符不是字符串的第一个字符
            if i != 0:
                snake_str.append('_')
            # 将大写字母转换为小写并添加到结果中
            snake_str.append(char.lower())
        else:
            # 直接添加小写字母到结果中，并重置添加下划线的标记
            snake_str.append(char)
    # 将列表转换为字符串并返回
    return ''.join(snake_str)